[小ネタ] 日本語のS3オブジェクトをLambdaのトリガーに設定してみた
こんにちは、コンサルティング部の後藤です。
表題通り、Lambdaのトリガーでフォルダ名が日本語のS3オブジェクトを指定するやり方をご紹介します。
S3オブジェクトについて
今回は検証のため、S3バケットにアルファベット表記の「test」と日本語表記の「テスト」のフォルダを用意しました。
Lambdaについて
オブジェクト作成後、「バケット名」と「オブジェクト名」を出力するLambdaを使用します。
import json def lambda_handler(event, context): # TODO implement bucket = event['Records'][0]['s3']['bucket']['name'] key = event['Records'][0]['s3']['object']['key'] print(bucket+'バケットに'+key+'が作成されました')
アルファベット表記のフォルダを設定してみる
まずアルファベット表記の「test」をトリガーとして設定します。
トリガーが設定されたら、S3「test/」に「test-object.txt」をアップロードします。
すると、想定通りLambdaはオブジェクト作成をトリガーに起動して、CloudWatchLogsにLambdaの実行結果が出力されました。
日本語表記のフォルダを設定してみる
次に日本語表記のフォルダ「テスト/」をトリガーとして同様に設定してみます。
先程と同様に、「test-object.txt」をアップロードしてみますが、Lambdaは起動せず、CloudWatchLogsにも出力が確認できませんでした。
オブジェクトURLを確認してみる
S3にアップロードした「テスト/test-object.txt」のオブジェクトURLを確認してみます。 すると、以下の通りに記載されておりました。
https://s3-074547258653.s3-ap-northeast-1.amazonaws.com/%E3%83%86%E3%82%B9%E3%83%88/test-object.txt
日本語表記の部分がUTF-8にエンコードされている事がわかると思います。
UTF-8に変換して設定してみる
先程「テスト/」で設定したLambdaのトリガーをUTF-8にエンコードした「%E3%83%86%E3%82%B9%E3%83%88/」で設定し、再度オブジェクトをアップロードしてみます。
すると、CloudWatchLogsにLambda実行結果が出力されていることが確認出来ました。
最後に
以上、S3の日本語フォルダ名をLambdaのトリガーとして扱うやり方でした。
S3ドキュメントにも記載がある通り、S3のオブジェクトキーはUTF-8を使用しております。またセーフ文字として数字、アルファベット、一部特殊文字と記載がありますので、詳細が気になる方は確認してみてください。
この記事が何方かのお役に立てば幸いです。